/*
 * Created on 29/06/2006
 *
 */
package ar.com.cubika.trainees.view;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import ar.com.cubika.trainees.bean.transportes.Ruta;
import ar.com.cubika.trainees.exceptions.BusinessException;

public class AgregarRutaServlet extends HttpServlet {

    protected void doGet(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException {
        this.doPost(request, response);
    }

    protected void doPost(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException {
        try {
            String origen = this.getParameterString(
                    request, "origen", "el origen");
            String destino = this.getParameterString(
                    request, "destino", "el destino");
            long kmBuenos = this.getParameterLong(request, "kmBuenos", "la cantidad de Km. en buen estado");
            long kmMalos = new Long(request.getParameter("kmMalos")).longValue();
            String codigoZona = request.getParameter("zona");
            boolean esConPeajes = request.getParameterMap().containsKey("conPeajes");
            String tipoDeRuta = request.getParameter("tipo");

            // ya se que esta de mas, es una alternativa
            this.checkNotEmpty(origen, "el origen");
            
            Ruta ruta = new Ruta(origen, destino);
            ruta.setKmBuenCamino(kmBuenos);
            ruta.setKmMalCamino(kmMalos);
            ruta.setConPeajes(esConPeajes);
            if (tipoDeRuta.equals("nacional")) {
                ruta.setNacional(true);
            } else if (tipoDeRuta.equals("privada")) {
                ruta.setPrivada(true);
            } else if (tipoDeRuta.equals("provincial")) {
                ruta.setProvincial(true);
            }
            
            Ruta.registrarRuta(ruta);
            
            // y claro, hay que forwardear a algun lado
            request.getRequestDispatcher("/viewEmpresa").forward(
                    request, response);
        } catch (BusinessException be) {
            request.setAttribute("mensajeDeError", be.getMessage());
            request.getRequestDispatcher("/crearUnaRuta").forward(
                    request, response);
        } catch (Exception be) {
            request.setAttribute("mensajeDeError", "ocurrio un problema no especificado");
            request.getRequestDispatcher("/crearUnaRuta").forward(
                    request, response);
        }
    }

    private long getParameterLong(HttpServletRequest request, String paramName, String mensaje) {
        String valor = request.getParameter(paramName);
        this.checkNotEmpty(valor, mensaje);
        return new Long(request.getParameter("kmBuenos")).longValue();
    }

    private String getParameterString(HttpServletRequest request, String paramName, String mensaje) {
        String valor = request.getParameter(paramName);
        this.checkNotEmpty(valor, mensaje);
        return valor;
    }

    private void checkNotEmpty(String valor, String mensaje) {
        if (valor.equals("")) {
            throw new BusinessException(mensaje + " no ha sido completada/o");
        }        
    }
    
}
